<html>
  <head>
    <title>Grails Runtime Exception</title>
    <style type="text/css">
      .message {
      border: 1px solid black;
      padding: 5px;
      background-color:#E9E9E9;
      }
      .stack {
      border: 1px solid black;
      padding: 5px;
      overflow:auto;
      height: 300px;
      }
      .snippet {
      padding: 5px;
      background-color:white;
      border:1px solid black;
      margin:3px;
      font-family:courier;
      }
    </style>
  </head>

  <body>
    <h1>Grails Runtime Exception</h1>
    <h2>Error Details</h2>

    <div class="message">
      <strong>Error ${request.'javax.servlet.error.status_code'}:</strong> ${request.'javax.servlet.error.message'.encodeAsHTML()}<br/>
      <strong>Servlet:</strong> ${request.'javax.servlet.error.servlet_name'}<br/>
      <strong>URI:</strong> ${request.'javax.servlet.error.request_uri'}<br/>
      <g:if test="${exception}">
	<strong>Exception Message:</strong> ${exception.message?.encodeAsHTML()} <br />
	<strong>Caused by:</strong> ${exception.cause?.message?.encodeAsHTML()} <br />
	<strong>Class:</strong> ${exception.className} <br />
	<strong>At Line:</strong> [${exception.lineNumber}] <br />
	<strong>Code Snippet:</strong><br />
	<div class="snippet">
	  <g:each var="cs" in="${exception.codeSnippet}">
	    ${cs?.encodeAsHTML()}<br />
	  </g:each>
	</div>
      </g:if>
    </div>
    <g:if test="${exception}">
      <h2>Stack Trace</h2>
      <div class="stack">
	<pre><g:each in="${exception.stackTraceLines}">${it.encodeAsHTML()}<br/></g:each></pre>
      </div>
    </g:if>
  </body>
</html>
